Madness 2024

Authors

Josh DeClercq

Department of Biostatistics

Vanderbilt University Medical Center

Published

March 20, 2024

Code
ratings <- read_sheet("1UYGzX2raigszjKffPPKf3oZZjVkU61c27Ppatkdm0so", sheet = "2024 schedule") %>%
  mutate(Date = ymd(Date)) %>% filter(Date <= ymd("2024.3.18")) %>% 
  select(album, Charlie:Tyler)

uu <- Cs(Charlie, Josh, Justin, Tyler)

totals <- ratings %>% select(album, all_of(uu) ) %>% 
  pivot_longer(., -1) %>% group_by(name) %>% 
  summarise(Total = sum(value)) %>% arrange(desc(Total))

ratings %<>% 
  mutate(across(all_of(uu), ~10*(.x-min(.x))/(max(.x)-min(.x)), .names =  "{.col}_st")) %>% 
  # mutate(across(all_of(uu), ~./sum(.x), .names =  "{.col}_st")) %>% 
  # mutate(across(contains("_st"), ~.x*max(totals$Total))) %>% 
  rowwise() %>% 
  mutate(total = sum(across(all_of(uu))),
         adj_total = sum(across(ends_with("_st")))) %>% ungroup() %>% 
  arrange(desc(total)) %>% mutate(raw_rank = 1:n()) %>% 
  arrange(desc(adj_total)) %>% mutate(adj_rank = 1:n()) %>% 
  rowwise() %>% 
  mutate(min_rating = min(across(ends_with("_st"))), t2 = total -min_rating) %>% ungroup() %>% 
  arrange(desc(t2)) %>% mutate(adj_rank_2 = 1:n()) %>% 
  arrange(desc(Charlie)) %>% mutate(charlie_rank = min_rank(desc(Charlie))) %>% 
  arrange(desc(Josh)) %>% mutate(josh_rank = min_rank(desc(Josh))) %>% 
  arrange(desc(Justin)) %>% mutate(justin_rank = min_rank(desc(Justin))) %>%
  arrange(desc(Tyler)) %>% mutate(tyler_rank = min_rank(desc(Tyler))) %>% 
  mutate(across(ends_with("_rank"), ~ifelse(.x <=20, "Top 20ish", "Nope"), .names = "{.col}_class")) %>% rowwise() %>% 
  mutate(agg_advance = sum(across(all_of(c("tyler_rank_class", "josh_rank_class", "justin_rank_class", "charlie_rank_class")), ~sum(.x == "Top 20ish")))) %>% ungroup()

# (value - 1.05) / (9.25 - 1.05)

mad_sheet <- read_sheet("1UYGzX2raigszjKffPPKf3oZZjVkU61c27Ppatkdm0so", sheet = "2024 albums") %>%
  mutate(artist = trimws(artist)) %>% 
  mutate(a1 = tolower(artist), a1 = stri_trans_general(a1, 'latin-ascii')) %>% 
  mutate(a2 = tolower(album), a2 = stri_trans_general(a2, 'latin-ascii')) %>% select(-n, -last_played)

mad_sheet %<>% mutate(popularity = log(monthly*1000, 10)) %>% mutate(listen_date = ymd(listen_date), 
                                                                     all_music = as.numeric(all_music))

mad_sheet %<>% left_join(., 
                       ratings,
                       by = "album")
Code
scrobbles <- lastfmR::get_scrobbles(user = "jjdeclercq")
mad_tal <- scrobbles %>% mutate(date = ymd(as.Date(date))) %>% filter(date > ymd("2024.1.1")) %>% 
  group_by(artist, album) %>%summarise(n = n(), last_played = max(date))%>%
  separate(., album, into = c("album", "extra2"), sep = " \\[", fill = "right") %>% 
  separate(., album, into = c("album", "extra"), sep = " \\(", fill = "right") %>% 
  group_by(artist, album) %>% summarise(n = sum(n), last_played = max(last_played))%>% 
  left_join(., fix_artists,  by = c("artist")) %>% mutate(artist = ifelse(!is.na(fix.a), fix.a, artist)) %>% 
    mutate(a1 = tolower(artist), a1 = stri_trans_general(a1, 'latin-ascii')) %>% 
    left_join(., fix_albums,  by = c("a1", "album")) %>% mutate(album = ifelse(!is.na(fix), fix, album)) %>% 
  mutate(a2 = tolower(album), a2 = stri_trans_general(a2, 'latin-ascii')) %>% 
  arrange(a1, a2, desc(n)) %>% 
  group_by(a1, a2) %>% summarise(n = sum(n), album = first(album), artist = first(artist), last_played = max(last_played))


mad_add <- left_join(mad_sheet , mad_tal %>% select(-artist, -album), by = c("a1", "a2")) %>% select(-a1, -a2) %>% 
  mutate(n = replace_na(n, 0)) %>% mutate(listens = round(n/tracks,1))


write_sheet(mad_add, "1UYGzX2raigszjKffPPKf3oZZjVkU61c27Ppatkdm0so", sheet = "2024 albums")
Code
mad_songs <- read.csv("madness_2024.csv") %>% namify() %>% 
  rename(album = album_name, artist = artist_name_s_, date = release_date) %>%
  separate(., album, into = c("album", "extra2"), sep = " \\[", fill = "right") %>% 
  separate(., album, into = c("album", "extra"), sep = " \\(", fill = "right")%>% 
  # left_join(., fix_artists,  by = c("artist")) %>% mutate(artist = ifelse(!is.na(fix.a), fix.a, artist)) %>% 
    mutate(a1 = tolower(artist), a1 = stri_trans_general(a1, 'latin-ascii')) %>% 
    # left_join(., fix_albums,  by = c("a1", "album")) %>% mutate(album = ifelse(!is.na(fix), fix, album)) %>% 
  mutate(a2 = tolower(album), a2 = stri_trans_general(a2, 'latin-ascii'),y2 = str_sub(date, 1,4))%>% 
  mutate(a1 = gsub(",.*","",a1))


mad_sheet %<>% left_join(., mad_songs %>% group_by(a1) %>% summarise(liked_songs = n())) %>% 
  mutate(liked_songs = replace_na(liked_songs, 0))

### Add in album art
fa <- data.frame(aa = list.files("png"))

fax <-fuzzyjoin::stringdist_join(mad_sheet %>% select(a1, a2) %>% mutate(aa = paste(a1, a2, sep = "-")), 
                                 fa,
                by='aa', #match based on team
                mode='left', #use left join
                method = "jw", #use jw distance metric
                max_dist=99,
                distance_col='dist')%>% 
  group_by(a2) %>% filter(dist == min(dist)) %>% ungroup() %>% 
  select(a2, art = aa.y)

mad_sheet %<>% left_join(., fax, by = "a2")

1 Albums

Code
cat(paste0("![](png/",mad_sheet$art,"){width=100px}\n"))

Figure 1: Prince

Code
mad_sheet %>% 
  select(raw_rank_class, order, popularity, tracks, length, who, year, g2, liked_songs, all_music, rym) %>% 
  jgt(., by = "who", overall = TRUE, add.p = TRUE, force.continuous = TRUE)
Characteristic N Chuck, N = 161 Josh, N = 161 Justin, N = 161 Tyler, N = 161 p-value2 Overall, N = 641
raw_rank_class 64 0.155
    Nope 9 (56.3%) 9 (56.3%) 14 (87.5%) 12 (75.0%) 44 (68.8%)
    Top 20ish 7 (43.8%) 7 (43.8%) 2 (12.5%) 4 (25.0%) 20 (31.3%)
order 64 0.885
    Mean (SD) 34.7 (15.7) 30.1 (20.0) 31.3 (20.6) 33.9 (19.3) 32.5 (18.6)
    Median (IQR) 38.0 (22.8 - 45.3) 23.5 (15.3 - 48.5) 31.5 (14.0 - 43.8) 32.0 (20.3 - 50.3) 32.5 (16.8 - 48.3)
    Range 3.0 - 56.0 1.0 - 61.0 2.0 - 64.0 5.0 - 62.0 1.0 - 64.0
popularity 64 0.209
    Mean (SD) 6.3 (0.7) 6.3 (0.8) 5.9 (0.9) 6.7 (1.0) 6.3 (0.9)
    Median (IQR) 6.3 (6.0 - 6.4) 6.4 (5.6 - 6.8) 6.2 (5.5 - 6.4) 6.8 (6.0 - 7.4) 6.3 (5.8 - 7.0)
    Range 4.4 - 8.0 4.9 - 8.0 4.4 - 7.7 4.9 - 8.0 4.4 - 8.0
tracks 64 0.673
    Mean (SD) 13.7 (3.1) 12.6 (3.4) 13.1 (2.7) 13.9 (3.7) 13.3 (3.2)
    Median (IQR) 13.5 (12.0 - 14.3) 12.0 (11.0 - 14.3) 12.5 (11.0 - 16.0) 14.5 (11.0 - 16.0) 13.0 (11.0 - 15.3)
    Range 9.0 - 22.0 7.0 - 21.0 9.0 - 18.0 8.0 - 22.0 7.0 - 22.0
length 64 0.823
    Mean (SD) 47.8 (13.1) 43.9 (8.8) 47.6 (13.2) 44.9 (12.4) 46.0 (11.9)
    Median (IQR) 47.0 (38.8 - 53.8) 41.0 (37.0 - 52.3) 46.0 (35.8 - 52.5) 43.5 (39.5 - 52.8) 44.0 (37.8 - 53.0)
    Range 23.0 - 73.0 34.0 - 61.0 33.0 - 78.0 25.0 - 75.0 23.0 - 78.0
year 64 0.030
    Mean (SD) 1995.8 (16.8) 1996.0 (20.0) 2012.6 (8.6) 2003.2 (17.7) 2001.9 (17.4)
    Median (IQR) 1997.5 (1981.5 - 2000.3) 1993.5 (1978.5 - 2019.3) 2014.5 (2006.0 - 2019.8) 2011.0 (1982.8 - 2017.0) 2004.5 (1987.5 - 2017.5)
    Range 1970.0 - 2024.0 1970.0 - 2024.0 1999.0 - 2023.0 1969.0 - 2023.0 1969.0 - 2024.0
g2 64 0.211
    alternative, indie & pop 2 (12.5%) 3 (18.8%) 3 (18.8%) 2 (12.5%) 10 (15.6%)
    country, folk, americana & blues 2 (12.5%) 4 (25.0%) 2 (12.5%) 4 (25.0%) 12 (18.8%)
    funk, soul and R&B 2 (12.5%) 3 (18.8%) 0 (0%) 3 (18.8%) 8 (12.5%)
    punk, rock & metal 8 (50.0%) 5 (31.3%) 3 (18.8%) 3 (18.8%) 19 (29.7%)
    rap & hip hop 2 (12.5%) 1 (6.25%) 8 (50.0%) 4 (25.0%) 15 (23.4%)
liked_songs 64 0.466
    Mean (SD) 0.9 (1.4) 1.5 (1.4) 0.8 (0.9) 1.1 (1.3) 1.1 (1.3)
    Median (IQR) 0.0 (0.0 - 2.0) 1.0 (0.0 - 2.3) 1.0 (0.0 - 1.0) 0.5 (0.0 - 2.0) 1.0 (0.0 - 2.0)
    Range 0.0 - 4.0 0.0 - 4.0 0.0 - 3.0 0.0 - 4.0 0.0 - 4.0
all_music 56 0.031
    Mean (SD) 4.1 (0.8) 4.4 (0.6) 4.0 (0.8) 3.6 (0.7) 4.0 (0.8)
    Median (IQR) 4.3 (3.5 - 4.5) 4.5 (4.0 - 5.0) 4.0 (3.5 - 4.5) 3.5 (3.0 - 4.3) 4.0 (3.5 - 4.5)
    Range 2.5 - 5.0 3.0 - 5.0 2.5 - 5.0 3.0 - 5.0 2.5 - 5.0
    Missing 0 1 5 2 8
rym 64 0.006
    Mean (SD) 3.4 (0.8) 3.7 (0.4) 3.5 (0.5) 3.2 (0.5) 3.4 (0.6)
    Median (IQR) 3.6 (3.5 - 3.7) 3.8 (3.6 - 3.9) 3.5 (3.4 - 3.8) 3.3 (2.7 - 3.6) 3.6 (3.4 - 3.8)
    Range 0.9 - 4.1 2.7 - 4.2 2.2 - 4.4 2.4 - 3.8 0.9 - 4.4
1 n (%)
2 Pearson’s Chi-squared test; Kruskal-Wallis rank sum test; Fisher’s exact test
Code
mad_sheet %>% 
  select(raw_rank_class,order, popularity, tracks, length, who, year, g2, liked_songs, all_music, rym) %>% 
  jgt(., by = "g2", overall = TRUE, add.p = TRUE)
Characteristic N alternative, indie & pop, N = 101 country, folk, americana & blues, N = 121 funk, soul and R&B, N = 81 punk, rock & metal, N = 191 rap & hip hop, N = 151 p-value2 Overall, N = 641
raw_rank_class 64 0.132
    Nope 9 (90.0%) 9 (75.0%) 5 (62.5%) 9 (47.4%) 12 (80.0%) 44 (68.8%)
    Top 20ish 1 (10.0%) 3 (25.0%) 3 (37.5%) 10 (52.6%) 3 (20.0%) 20 (31.3%)
order 64 0.501
    Mean (SD) 27.7 (20.4) 27.3 (16.3) 33.1 (18.4) 38.2 (19.1) 32.3 (18.9) 32.5 (18.6)
    Median (IQR) 20.0 (14.3 - 40.8) 26.5 (12.8 - 42.8) 39.0 (22.8 - 45.5) 41.0 (21.5 - 55.0) 30.0 (23.0 - 43.0) 32.5 (16.8 - 48.3)
    Range 2.0 - 60.0 4.0 - 51.0 5.0 - 53.0 3.0 - 64.0 1.0 - 63.0 1.0 - 64.0
popularity 64 0.004
    Mean (SD) 7.1 (0.8) 6.1 (0.8) 6.6 (0.5) 5.8 (0.8) 6.4 (0.9) 6.3 (0.9)
    Median (IQR) 7.0 (6.3 - 8.0) 6.1 (5.6 - 6.6) 6.6 (6.1 - 7.1) 6.0 (5.3 - 6.3) 6.4 (5.7 - 7.3) 6.3 (5.8 - 7.0)
    Range 6.2 - 8.0 4.9 - 7.5 6.0 - 7.1 4.4 - 7.0 4.8 - 7.8 4.4 - 8.0
tracks 64 0.007
    Mean (SD) 12.6 (2.9) 12.0 (1.3) 11.0 (3.0) 13.8 (3.6) 15.5 (2.9) 13.3 (3.2)
    Median (IQR) 12.0 (11.0 - 14.5) 12.0 (11.0 - 13.0) 11.0 (8.8 - 12.8) 14.0 (11.0 - 15.5) 16.0 (13.5 - 16.5) 13.0 (11.0 - 15.3)
    Range 9.0 - 17.0 10.0 - 14.0 7.0 - 15.0 8.0 - 22.0 11.0 - 22.0 7.0 - 22.0
length 64 0.009
    Mean (SD) 48.7 (11.6) 43.3 (6.6) 38.5 (4.5) 42.6 (12.6) 54.8 (12.5) 46.0 (11.9)
    Median (IQR) 51.0 (37.3 - 56.0) 43.0 (39.5 - 44.0) 38.5 (37.0 - 40.3) 40.0 (34.5 - 52.5) 51.0 (47.0 - 61.5) 44.0 (37.8 - 53.0)
    Range 33.0 - 67.0 36.0 - 61.0 30.0 - 46.0 23.0 - 73.0 34.0 - 78.0 23.0 - 78.0
who 64 0.211
    Chuck 2 (20.0%) 2 (16.7%) 2 (25.0%) 8 (42.1%) 2 (13.3%) 16 (25.0%)
    Josh 3 (30.0%) 4 (33.3%) 3 (37.5%) 5 (26.3%) 1 (6.67%) 16 (25.0%)
    Justin 3 (30.0%) 2 (16.7%) 0 (0%) 3 (15.8%) 8 (53.3%) 16 (25.0%)
    Tyler 2 (20.0%) 4 (33.3%) 3 (37.5%) 3 (15.8%) 4 (26.7%) 16 (25.0%)
year 64 0.002
    Mean (SD) 2012.6 (10.1) 2000.7 (18.0) 1986.3 (19.8) 1994.9 (16.1) 2013.0 (9.4) 2001.9 (17.4)
    Median (IQR) 2015.5 (2008.0 - 2019.3) 2001.5 (1994.8 - 2013.3) 1979.5 (1972.5 - 1990.3) 1994.0 (1982.0 - 2002.5) 2015.0 (2006.0 - 2020.0) 2004.5 (1987.5 - 2017.5)
    Range 1989.0 - 2023.0 1969.0 - 2023.0 1970.0 - 2020.0 1973.0 - 2024.0 1998.0 - 2024.0 1969.0 - 2024.0
liked_songs 64
    0 4 (40.0%) 4 (33.3%) 4 (50.0%) 11 (57.9%) 7 (46.7%) 30 (46.9%)
    1 5 (50.0%) 3 (25.0%) 2 (25.0%) 0 (0%) 3 (20.0%) 13 (20.3%)
    2 1 (10.0%) 3 (25.0%) 2 (25.0%) 4 (21.1%) 1 (6.67%) 11 (17.2%)
    3 0 (0%) 0 (0%) 0 (0%) 3 (15.8%) 3 (20.0%) 6 (9.38%)
    4 0 (0%) 2 (16.7%) 0 (0%) 1 (5.26%) 1 (6.67%) 4 (6.25%)
all_music 56
    2.5 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (16.7%) 2 (3.57%)
    3 1 (10.0%) 1 (11.1%) 2 (25.0%) 4 (23.5%) 1 (8.33%) 9 (16.1%)
    3.5 0 (0%) 3 (33.3%) 0 (0%) 4 (23.5%) 3 (25.0%) 10 (17.9%)
    4 4 (40.0%) 2 (22.2%) 0 (0%) 2 (11.8%) 3 (25.0%) 11 (19.6%)
    4.5 1 (10.0%) 2 (22.2%) 4 (50.0%) 4 (23.5%) 0 (0%) 11 (19.6%)
    5 4 (40.0%) 1 (11.1%) 2 (25.0%) 3 (17.6%) 3 (25.0%) 13 (23.2%)
    Missing 0 3 0 2 3 8
rym 64 0.963
    Mean (SD) 3.4 (0.6) 3.5 (0.4) 3.6 (0.2) 3.6 (0.3) 3.2 (0.9) 3.4 (0.6)
    Median (IQR) 3.6 (2.9 - 3.9) 3.6 (3.4 - 3.7) 3.5 (3.4 - 3.8) 3.6 (3.4 - 3.7) 3.5 (2.6 - 3.8) 3.6 (3.4 - 3.8)
    Range 2.4 - 4.0 2.4 - 4.2 3.4 - 4.0 3.0 - 4.1 0.9 - 4.4 0.9 - 4.4
1 n (%)
2 Fisher’s exact test; Kruskal-Wallis rank sum test

1.1 Popularity by year and genre

Code
mad_sheet %>% 
  ggplot(., aes(x= year, y = popularity, colour = g2)) +geom_point() +
  facet_wrap(~who) +theme_bw()

1.2 Albums details

Code
mad_sheet  %>% 
  select(art,raw_rank, adj_rank, adj_rank_2, artist, album, order, who, year:liked_songs) %>% 
  j.reactable(
  .,
  columns = list(
    art = colDef(cell = function(value) {
      image <- img(src = sprintf("png/%s", value), style = "height: 100px;", alt = "")
      tagList(
        div(style = "display: inline-block; width: 45px;", image),
        # value
      )})
  )
)

2 Ratings

2.1 Overview

Code
# ColorBrewer-inspired 3-color scale
BuYlRd <- function(x) rgb(colorRamp(c("#7fb7d7", "#ffffbf", "salmon"))(x), maxColorValue = 255)

mad_sheet %>% select(adj_rank, raw_rank,who,g2, album, Charlie:Tyler) %>% 
  mutate(Avg = (Charlie +Josh + Justin +Tyler)/4) %>% 
  na.omit() %>% 
  mutate(raw_rank = ifelse(raw_rank <10, paste0("0",raw_rank), as.character(raw_rank))) %>% 
  mutate(adj_rank = ifelse(adj_rank <10, paste0("0",adj_rank), as.character(adj_rank))) %>% 
  j.reactable(., 
              defaultColDef = colDef(
    style = function(value) {
      if (!is.numeric(value)) return()
      normalized <- (value - 1.05) / (9.25 - 1.05)
      color <- BuYlRd(normalized)
      list(background = color)
    },
    format = colFormat(digits = 1),
    minWidth = 50
  ), defaultPageSize = 64
  )
Code
mad_sheet %>% select(album, all_of(uu) ) %>% 
  pivot_longer(., -1) %>% 
  ggplot(., aes(x = name, y = value, colour = name)) + geom_boxplot() +geom_beeswarm() +theme_minimal() + guides(colour = "none")

2.2 Advanced to next round

Code
mad_sheet %>% select(ends_with("rank_class"), agg_advance, who) %>% 
  jgt(., by = "adj_rank_class", add.p = TRUE, overall = TRUE)
Characteristic N Nope, N = 441 Top 20ish, N = 201 p-value2 Overall, N = 641
raw_rank_class 64 <0.001
    Nope 44 (100.0%) 0 (0%) 44 (68.8%)
    Top 20ish 0 (0%) 20 (100.0%) 20 (31.3%)
charlie_rank_class 64 <0.001
    Nope 39 (88.6%) 5 (25.0%) 44 (68.8%)
    Top 20ish 5 (11.4%) 15 (75.0%) 20 (31.3%)
josh_rank_class 64 <0.001
    Nope 38 (86.4%) 6 (30.0%) 44 (68.8%)
    Top 20ish 6 (13.6%) 14 (70.0%) 20 (31.3%)
justin_rank_class 64 <0.001
    Nope 37 (84.1%) 5 (25.0%) 42 (65.6%)
    Top 20ish 7 (15.9%) 15 (75.0%) 22 (34.4%)
tyler_rank_class 64 <0.001
    Nope 37 (84.1%) 7 (35.0%) 44 (68.8%)
    Top 20ish 7 (15.9%) 13 (65.0%) 20 (31.3%)
agg_advance 64 <0.001
    0 25 (56.8%) 0 (0%) 25 (39.1%)
    1 13 (29.5%) 1 (5.00%) 14 (21.9%)
    2 6 (13.6%) 7 (35.0%) 13 (20.3%)
    3 0 (0%) 6 (30.0%) 6 (9.38%)
    4 0 (0%) 6 (30.0%) 6 (9.38%)
who 64 0.155
    Chuck 9 (20.5%) 7 (35.0%) 16 (25.0%)
    Josh 9 (20.5%) 7 (35.0%) 16 (25.0%)
    Justin 14 (31.8%) 2 (10.0%) 16 (25.0%)
    Tyler 12 (27.3%) 4 (20.0%) 16 (25.0%)
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test
Code
mad_sheet %>% select(ends_with("rank_class"), agg_advance, who) %>% 
  jgt(., by = "who", add.p = TRUE, overall = TRUE)
Characteristic N Chuck, N = 161 Josh, N = 161 Justin, N = 161 Tyler, N = 161 p-value2 Overall, N = 641
raw_rank_class 64 0.155
    Nope 9 (56.3%) 9 (56.3%) 14 (87.5%) 12 (75.0%) 44 (68.8%)
    Top 20ish 7 (43.8%) 7 (43.8%) 2 (12.5%) 4 (25.0%) 20 (31.3%)
adj_rank_class 64 0.155
    Nope 9 (56.3%) 9 (56.3%) 14 (87.5%) 12 (75.0%) 44 (68.8%)
    Top 20ish 7 (43.8%) 7 (43.8%) 2 (12.5%) 4 (25.0%) 20 (31.3%)
charlie_rank_class 64 0.011
    Nope 6 (37.5%) 11 (68.8%) 14 (87.5%) 13 (81.3%) 44 (68.8%)
    Top 20ish 10 (62.5%) 5 (31.3%) 2 (12.5%) 3 (18.8%) 20 (31.3%)
josh_rank_class 64 0.020
    Nope 12 (75.0%) 6 (37.5%) 13 (81.3%) 13 (81.3%) 44 (68.8%)
    Top 20ish 4 (25.0%) 10 (62.5%) 3 (18.8%) 3 (18.8%) 20 (31.3%)
justin_rank_class 64 0.842
    Nope 10 (62.5%) 10 (62.5%) 10 (62.5%) 12 (75.0%) 42 (65.6%)
    Top 20ish 6 (37.5%) 6 (37.5%) 6 (37.5%) 4 (25.0%) 22 (34.4%)
tyler_rank_class 64 0.011
    Nope 11 (68.8%) 9 (56.3%) 16 (100.0%) 8 (50.0%) 44 (68.8%)
    Top 20ish 5 (31.3%) 7 (43.8%) 0 (0%) 8 (50.0%) 20 (31.3%)
agg_advance 64 0.415
    0 4 (25.0%) 5 (31.3%) 10 (62.5%) 6 (37.5%) 25 (39.1%)
    1 5 (31.3%) 3 (18.8%) 2 (12.5%) 4 (25.0%) 14 (21.9%)
    2 3 (18.8%) 2 (12.5%) 3 (18.8%) 5 (31.3%) 13 (20.3%)
    3 2 (12.5%) 3 (18.8%) 1 (6.25%) 0 (0%) 6 (9.38%)
    4 2 (12.5%) 3 (18.8%) 0 (0%) 1 (6.25%) 6 (9.38%)
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test
Code
mad_sheet %>% select(ends_with("rank_class"), agg_advance, g2) %>% 
  jgt(., by = "g2", add.p = TRUE, overall = TRUE)
Characteristic N alternative, indie & pop, N = 101 country, folk, americana & blues, N = 121 funk, soul and R&B, N = 81 punk, rock & metal, N = 191 rap & hip hop, N = 151 p-value2 Overall, N = 641
raw_rank_class 64 0.132
    Nope 9 (90.0%) 9 (75.0%) 5 (62.5%) 9 (47.4%) 12 (80.0%) 44 (68.8%)
    Top 20ish 1 (10.0%) 3 (25.0%) 3 (37.5%) 10 (52.6%) 3 (20.0%) 20 (31.3%)
adj_rank_class 64 0.132
    Nope 9 (90.0%) 9 (75.0%) 5 (62.5%) 9 (47.4%) 12 (80.0%) 44 (68.8%)
    Top 20ish 1 (10.0%) 3 (25.0%) 3 (37.5%) 10 (52.6%) 3 (20.0%) 20 (31.3%)
charlie_rank_class 64 <0.001
    Nope 10 (100.0%) 9 (75.0%) 4 (50.0%) 7 (36.8%) 14 (93.3%) 44 (68.8%)
    Top 20ish 0 (0%) 3 (25.0%) 4 (50.0%) 12 (63.2%) 1 (6.67%) 20 (31.3%)
josh_rank_class 64 0.304
    Nope 7 (70.0%) 9 (75.0%) 4 (50.0%) 11 (57.9%) 13 (86.7%) 44 (68.8%)
    Top 20ish 3 (30.0%) 3 (25.0%) 4 (50.0%) 8 (42.1%) 2 (13.3%) 20 (31.3%)
justin_rank_class 64 0.937
    Nope 7 (70.0%) 9 (75.0%) 5 (62.5%) 12 (63.2%) 9 (60.0%) 42 (65.6%)
    Top 20ish 3 (30.0%) 3 (25.0%) 3 (37.5%) 7 (36.8%) 6 (40.0%) 22 (34.4%)
tyler_rank_class 64 0.016
    Nope 10 (100.0%) 6 (50.0%) 4 (50.0%) 11 (57.9%) 13 (86.7%) 44 (68.8%)
    Top 20ish 0 (0%) 6 (50.0%) 4 (50.0%) 8 (42.1%) 2 (13.3%) 20 (31.3%)
agg_advance 64
    0 6 (60.0%) 4 (33.3%) 1 (12.5%) 6 (31.6%) 8 (53.3%) 25 (39.1%)
    1 2 (20.0%) 5 (41.7%) 2 (25.0%) 2 (10.5%) 3 (20.0%) 14 (21.9%)
    2 2 (20.0%) 1 (8.33%) 3 (37.5%) 3 (15.8%) 4 (26.7%) 13 (20.3%)
    3 0 (0%) 0 (0%) 1 (12.5%) 5 (26.3%) 0 (0%) 6 (9.38%)
    4 0 (0%) 2 (16.7%) 1 (12.5%) 3 (15.8%) 0 (0%) 6 (9.38%)
1 n (%)
2 Fisher’s exact test
Code
mad_sheet %>% 
  select(album,agg_advance,raw_rank_class, raw_rank, ends_with("_rank"), agg_advance) %>% 
  j.reactable(., defaultPageSize = 64, filterable = TRUE)
Code
mad_sheet %>% 
  select(album,agg_advance,raw_rank_class, raw_rank, ends_with("_rank_class"), agg_advance) %>% 
  j.reactable(., defaultPageSize = 64, filterable = TRUE)

2.3 By picker

Code
mad_sheet %>% select(Charlie:Tyler, who) %>% na.omit() %>% jgt(., by = "who", overall = TRUE, add.p = TRUE, spanner.size = 4, spanner.text = "Album picked by")
Characteristic N Album picked by p-value1 Overall, N = 64
Chuck, N = 16 Josh, N = 16 Justin, N = 16 Tyler, N = 16
Charlie 64 0.005
    Mean (SD) 6.5 (1.4) 5.6 (1.4) 4.6 (1.6) 5.1 (1.5) 5.4 (1.6)
    Median (IQR) 6.8 (6.0 - 7.5) 5.7 (4.6 - 6.8) 4.3 (3.8 - 5.2) 5.1 (4.5 - 5.9) 5.6 (4.4 - 6.7)
    Range 3.5 - 8.5 2.3 - 7.5 1.2 - 8.1 1.2 - 7.7 1.2 - 8.5
Josh 64 0.010
    Mean (SD) 5.7 (2.1) 7.1 (1.1) 5.1 (1.8) 5.2 (1.9) 5.8 (1.9)
    Median (IQR) 6.3 (4.8 - 6.7) 7.1 (6.0 - 7.6) 5.0 (3.9 - 6.2) 5.6 (3.8 - 6.5) 6.0 (4.5 - 7.1)
    Range 1.1 - 8.4 5.2 - 9.3 1.5 - 8.0 1.5 - 8.0 1.1 - 9.3
Justin 64 0.609
    Mean (SD) 5.5 (1.7) 5.9 (1.3) 6.0 (1.5) 5.5 (1.4) 5.7 (1.5)
    Median (IQR) 5.3 (4.4 - 7.0) 5.5 (5.0 - 7.1) 5.9 (5.0 - 7.1) 5.8 (4.6 - 6.6) 5.5 (4.8 - 7.0)
    Range 2.5 - 8.0 4.0 - 8.0 3.5 - 8.5 3.0 - 7.0 2.5 - 8.5
Tyler 64 0.002
    Mean (SD) 5.8 (2.0) 5.8 (1.5) 4.3 (1.3) 6.4 (1.0) 5.6 (1.7)
    Median (IQR) 6.0 (4.8 - 7.0) 5.8 (5.0 - 7.0) 4.5 (4.0 - 5.0) 6.5 (5.5 - 7.1) 5.6 (5.0 - 7.0)
    Range 1.9 - 9.0 2.5 - 7.6 1.3 - 6.0 5.0 - 8.0 1.3 - 9.0
1 Kruskal-Wallis rank sum test
Code
mad_sheet %>% select(ends_with("_st"), who) %>% na.omit() %>% jgt(., by = "who", overall = TRUE, add.p = TRUE, spanner.size = 4, spanner.text = "Album picked by")
Characteristic N Album picked by p-value1 Overall, N = 64
Chuck, N = 16 Josh, N = 16 Justin, N = 16 Tyler, N = 16
Charlie_st 64 0.005
    Mean (SD) 7.2 (1.9) 6.1 (2.0) 4.6 (2.2) 5.3 (2.1) 5.8 (2.2)
    Median (IQR) 7.6 (6.6 - 8.6) 6.1 (4.6 - 7.6) 4.2 (3.6 - 5.4) 5.3 (4.5 - 6.4) 6.0 (4.3 - 7.5)
    Range 3.2 - 10.0 1.5 - 8.6 0.0 - 9.5 0.0 - 8.9 0.0 - 10.0
Josh_st 64 0.010
    Mean (SD) 5.6 (2.5) 7.4 (1.4) 5.0 (2.2) 5.1 (2.4) 5.8 (2.3)
    Median (IQR) 6.4 (4.5 - 6.9) 7.4 (6.1 - 8.0) 4.8 (3.5 - 6.3) 5.6 (3.4 - 6.7) 6.1 (4.2 - 7.3)
    Range 0.0 - 9.0 5.1 - 10.0 0.5 - 8.5 0.6 - 8.5 0.0 - 10.0
Justin_st 64 0.609
    Mean (SD) 5.0 (2.8) 5.6 (2.2) 5.9 (2.5) 4.9 (2.3) 5.4 (2.4)
    Median (IQR) 4.6 (3.1 - 7.5) 5.0 (4.2 - 7.6) 5.6 (4.2 - 7.6) 5.4 (3.5 - 6.8) 5.0 (3.8 - 7.5)
    Range 0.0 - 9.2 2.5 - 9.2 1.7 - 10.0 0.8 - 7.5 0.0 - 10.0
Tyler_st 64 0.002
    Mean (SD) 5.8 (2.6) 5.8 (2.0) 3.9 (1.7) 6.6 (1.3) 5.5 (2.2)
    Median (IQR) 6.1 (4.5 - 7.4) 5.8 (4.8 - 7.4) 4.1 (3.5 - 4.8) 6.7 (5.5 - 7.5) 5.6 (4.8 - 7.4)
    Range 0.7 - 10.0 1.6 - 8.2 0.0 - 6.1 4.8 - 8.7 0.0 - 10.0
1 Kruskal-Wallis rank sum test

2.4 Rounds of 8

Code
mad_sheet%>% 
  mutate(o2 = cut2(order, cuts = c(9, 17, 25, 33, 41, 49, 57))) %>% 
  select(o2, Charlie:Tyler) %>% 
  pivot_longer(., -1) %>% 
  ggplot(., aes(x = value, colour = o2)) + geom_density()

Code
mad_sheet%>% 
  mutate(o2 = cut2(order, cuts = c(9, 17, 25, 33, 41, 49, 57))) %>% 
  select(adj_rank_class, o2, Charlie:Tyler) %>% 
  jgt(., by = "o2", add.p = TRUE)
Characteristic N [ 1, 9), N = 81 [ 9,17), N = 81 [17,25), N = 81 [25,33), N = 81 [33,41), N = 81 [41,49), N = 81 [49,57), N = 81 [57,64], N = 81 p-value2
adj_rank_class 64 0.433
    Nope 5 (62.5%) 4 (50.0%) 6 (75.0%) 6 (75.0%) 5 (62.5%) 6 (75.0%) 4 (50.0%) 8 (100.0%)
    Top 20ish 3 (37.5%) 4 (50.0%) 2 (25.0%) 2 (25.0%) 3 (37.5%) 2 (25.0%) 4 (50.0%) 0 (0%)
Charlie 64 0.917
    Mean (SD) 5.0 (2.3) 5.4 (1.4) 6.1 (1.7) 5.1 (1.8) 5.6 (1.5) 5.7 (1.6) 5.6 (1.6) 4.9 (1.1)
    Median (IQR) 5.6 (3.6 - 6.7) 5.6 (4.4 - 6.0) 5.5 (4.6 - 7.7) 5.7 (4.4 - 6.2) 5.6 (4.4 - 6.8) 5.9 (4.7 - 6.8) 5.6 (4.4 - 7.0) 5.0 (4.2 - 5.7)
    Range 1.2 - 7.7 3.2 - 7.5 4.2 - 8.5 1.2 - 6.9 3.5 - 7.7 3.2 - 8.1 3.3 - 7.5 3.2 - 6.5
Josh 64 0.497
    Mean (SD) 5.9 (2.2) 6.8 (2.4) 5.6 (2.5) 4.9 (1.7) 5.7 (2.2) 5.7 (1.5) 6.2 (1.1) 5.5 (1.4)
    Median (IQR) 6.4 (5.3 - 7.2) 6.9 (6.5 - 8.3) 6.5 (4.5 - 7.1) 5.4 (4.0 - 6.1) 5.7 (4.3 - 7.7) 5.9 (4.7 - 6.8) 6.3 (5.8 - 7.0) 5.6 (4.3 - 6.4)
    Range 1.7 - 8.2 1.5 - 9.3 1.1 - 8.4 1.5 - 6.5 2.0 - 8.1 3.6 - 7.5 4.0 - 7.7 3.7 - 7.5
Justin 64 0.568
    Mean (SD) 6.4 (1.6) 6.5 (1.4) 5.5 (1.5) 5.7 (1.4) 5.4 (0.9) 5.3 (1.9) 5.8 (1.1) 5.2 (1.8)
    Median (IQR) 6.7 (4.9 - 7.6) 7.0 (6.3 - 7.4) 5.3 (5.0 - 5.9) 6.0 (4.8 - 6.8) 5.3 (5.0 - 5.8) 5.0 (4.0 - 7.0) 5.9 (5.4 - 6.3) 4.9 (3.9 - 6.6)
    Range 4.5 - 8.5 4.0 - 7.6 3.0 - 8.0 3.5 - 7.0 4.0 - 6.9 2.5 - 8.0 4.0 - 7.5 3.0 - 8.0
Tyler 64 0.268
    Mean (SD) 5.6 (1.7) 5.6 (1.9) 6.0 (1.6) 5.1 (1.5) 6.1 (2.5) 5.1 (1.9) 6.3 (1.2) 4.8 (0.7)
    Median (IQR) 6.0 (4.8 - 6.4) 6.5 (4.8 - 7.0) 5.7 (5.0 - 6.5) 5.0 (5.0 - 5.8) 7.3 (4.8 - 8.0) 5.8 (3.8 - 6.3) 6.8 (5.8 - 7.1) 5.0 (4.0 - 5.1)
    Range 2.5 - 7.5 1.9 - 7.0 4.0 - 9.0 2.0 - 6.9 1.3 - 8.0 2.0 - 7.0 4.0 - 7.5 4.0 - 5.5
1 n (%)
2 Fisher’s exact test; Kruskal-Wallis rank sum test
Code
mad_sheet%>% 
  mutate(o2 = cut2(order, cuts = c(9, 17, 25, 33, 41, 49, 57))) %>% 
  select(o2, Charlie:Tyler) %>% 
  pivot_longer(., -c(1)) %>% select(-name) %>% 
  jgt(., by = "o2", add.p = TRUE)
Characteristic N [ 1, 9), N = 32 [ 9,17), N = 32 [17,25), N = 32 [25,33), N = 32 [33,41), N = 32 [41,49), N = 32 [49,57), N = 32 [57,64], N = 32 p-value1
value 256 0.072
    Mean (SD) 5.7 (2.0) 6.1 (1.8) 5.8 (1.8) 5.2 (1.6) 5.7 (1.8) 5.5 (1.7) 6.0 (1.2) 5.1 (1.3)
    Median (IQR) 6.0 (4.5 - 7.2) 6.8 (4.9 - 7.1) 5.5 (5.0 - 7.1) 5.5 (4.4 - 6.5) 5.6 (4.5 - 7.3) 5.6 (4.0 - 6.9) 6.1 (5.4 - 7.0) 5.0 (4.0 - 5.9)
    Range 1.2 - 8.5 1.5 - 9.3 1.1 - 9.0 1.2 - 7.0 1.3 - 8.1 2.0 - 8.1 3.3 - 7.7 3.0 - 8.0
1 Kruskal-Wallis rank sum test

2.5 By genre

Code
mad_sheet %>% select(Charlie:Tyler, g2) %>% na.omit() %>% jgt(., by = "g2", overall = TRUE, add.p = TRUE, spanner.size = 5, spanner.text = "Genre")
Characteristic N Genre p-value1 Overall, N = 64
alternative, indie & pop, N = 10 country, folk, americana & blues, N = 12 funk, soul and R&B, N = 8 punk, rock & metal, N = 19 rap & hip hop, N = 15
Charlie 64 <0.001
    Mean (SD) 4.8 (0.5) 4.8 (1.8) 6.1 (1.2) 6.6 (1.3) 4.5 (1.6) 5.4 (1.6)
    Median (IQR) 4.7 (4.4 - 5.2) 4.7 (3.8 - 6.0) 6.4 (5.7 - 6.8) 6.8 (5.7 - 7.5) 4.5 (3.4 - 5.8) 5.6 (4.4 - 6.7)
    Range 4.2 - 5.5 1.2 - 7.5 4.2 - 7.7 4.1 - 8.5 1.2 - 7.1 1.2 - 8.5
Josh 64 0.041
    Mean (SD) 5.7 (1.5) 5.2 (2.3) 6.6 (1.4) 6.5 (1.7) 4.9 (1.9) 5.8 (1.9)
    Median (IQR) 5.6 (4.6 - 6.9) 5.4 (3.7 - 6.6) 6.6 (5.9 - 7.9) 6.6 (6.0 - 7.5) 5.5 (3.8 - 6.4) 6.0 (4.5 - 7.1)
    Range 3.6 - 8.0 1.5 - 9.0 4.0 - 8.2 1.1 - 9.3 1.5 - 7.5 1.1 - 9.3
Justin 64 0.560
    Mean (SD) 5.3 (1.7) 5.3 (1.3) 6.1 (1.2) 5.7 (1.6) 6.2 (1.5) 5.7 (1.5)
    Median (IQR) 5.5 (4.6 - 6.6) 5.0 (4.4 - 6.3) 6.7 (5.4 - 6.9) 5.5 (4.7 - 7.0) 6.0 (5.0 - 7.2) 5.5 (4.8 - 7.0)
    Range 2.5 - 7.6 3.5 - 7.3 4.0 - 7.5 3.0 - 8.0 4.0 - 8.5 2.5 - 8.5
Tyler 64 0.009
    Mean (SD) 4.1 (1.8) 5.9 (1.6) 6.4 (1.4) 6.3 (1.3) 5.0 (1.6) 5.6 (1.7)
    Median (IQR) 5.0 (2.5 - 5.0) 6.9 (4.8 - 7.0) 6.6 (5.4 - 7.5) 6.0 (5.5 - 7.0) 5.0 (4.0 - 5.9) 5.6 (5.0 - 7.0)
    Range 1.3 - 6.0 3.0 - 7.5 4.0 - 8.0 4.0 - 9.0 2.0 - 8.0 1.3 - 9.0
1 Kruskal-Wallis rank sum test
Code
mad_sheet %>% select(ends_with("_st"), g2) %>% na.omit() %>% jgt(., by = "g2", overall = TRUE, add.p = TRUE, spanner.size = 4, spanner.text = "Album picked by")
Characteristic N Album picked by rap & hip hop, N = 15 p-value1 Overall, N = 64
alternative, indie & pop, N = 10 country, folk, americana & blues, N = 12 funk, soul and R&B, N = 8 punk, rock & metal, N = 19
Charlie_st 64 <0.001
    Mean (SD) 4.9 (0.7) 4.9 (2.5) 6.7 (1.6) 7.4 (1.8) 4.6 (2.2) 5.8 (2.2)
    Median (IQR) 4.7 (4.4 - 5.5) 4.7 (3.6 - 6.5) 7.1 (6.2 - 7.6) 7.7 (6.2 - 8.6) 4.5 (3.0 - 6.2) 6.0 (4.3 - 7.5)
    Range 4.1 - 5.9 0.0 - 8.6 4.1 - 8.9 4.0 - 10.0 0.0 - 8.1 0.0 - 10.0
Josh_st 64 0.041
    Mean (SD) 5.7 (1.8) 5.0 (2.8) 6.8 (1.7) 6.7 (2.1) 4.7 (2.3) 5.8 (2.3)
    Median (IQR) 5.5 (4.4 - 7.2) 5.2 (3.3 - 6.7) 6.8 (5.9 - 8.4) 6.8 (6.1 - 7.9) 5.4 (3.3 - 6.5) 6.1 (4.2 - 7.3)
    Range 3.1 - 8.5 0.6 - 9.7 3.6 - 8.7 0.0 - 10.0 0.5 - 7.8 0.0 - 10.0
Justin_st 64 0.560
    Mean (SD) 4.7 (2.8) 4.6 (2.1) 6.1 (2.0) 5.3 (2.6) 6.1 (2.4) 5.4 (2.4)
    Median (IQR) 5.0 (3.5 - 6.8) 4.2 (3.1 - 6.3) 6.9 (4.8 - 7.4) 5.0 (3.7 - 7.5) 5.8 (4.2 - 7.8) 5.0 (3.8 - 7.5)
    Range 0.0 - 8.5 1.7 - 8.0 2.5 - 8.3 0.8 - 9.2 2.5 - 10.0 0.0 - 10.0
Tyler_st 64 0.009
    Mean (SD) 3.7 (2.3) 5.9 (2.0) 6.6 (1.9) 6.5 (1.7) 4.8 (2.0) 5.5 (2.2)
    Median (IQR) 4.8 (1.6 - 4.8) 7.2 (4.5 - 7.4) 6.9 (5.3 - 8.1) 6.1 (5.5 - 7.4) 4.8 (3.5 - 6.0) 5.6 (4.8 - 7.4)
    Range 0.0 - 6.1 2.2 - 8.1 3.5 - 8.7 3.5 - 10.0 0.9 - 8.7 0.0 - 10.0
1 Kruskal-Wallis rank sum test

2.6 Average rating

Code
mad_sheet %>% select(Charlie:Tyler, who) %>% 
  pivot_longer(., -c("who"), values_drop_na = TRUE) %>% select(value, who) %>% 
  jgt(., by = "who", add.p = TRUE, spanner.size = 4, spanner.text = "Album picked by")
Characteristic N Album picked by p-value1
Chuck, N = 64 Josh, N = 64 Justin, N = 64 Tyler, N = 64
value 256 <0.001
    Mean (SD) 5.9 (1.8) 6.1 (1.5) 5.0 (1.7) 5.5 (1.5)
    Median (IQR) 6.3 (4.5 - 7.0) 6.0 (5.0 - 7.2) 5.0 (4.0 - 6.0) 5.7 (4.8 - 6.7)
    Range 1.1 - 9.0 2.3 - 9.3 1.2 - 8.5 1.2 - 8.0
1 Kruskal-Wallis rank sum test
Code
mad_sheet %>% select(ends_with("_st"), who) %>% 
  pivot_longer(., -c("who"), values_drop_na = TRUE) %>% select(value, who) %>% 
  jgt(., by = "who", add.p = TRUE, spanner.size = 4, spanner.text = "Album picked by")
Characteristic N Album picked by p-value1
Chuck, N = 64 Josh, N = 64 Justin, N = 64 Tyler, N = 64
value 256 0.002
    Mean (SD) 5.9 (2.6) 6.2 (2.0) 4.8 (2.3) 5.5 (2.1)
    Median (IQR) 6.6 (4.1 - 7.5) 6.1 (4.8 - 7.9) 4.6 (3.5 - 6.1) 5.8 (4.5 - 7.3)
    Range 0.0 - 10.0 1.5 - 10.0 0.0 - 10.0 0.0 - 8.9
1 Kruskal-Wallis rank sum test

2.7 Average rating by genre

Code
mad_sheet %>% select(Charlie:Tyler, g2) %>% 
  pivot_longer(., -c("g2"), values_drop_na = TRUE) %>% select(value, g2) %>% 
  jgt(., by = "g2", add.p = TRUE, spanner.size = 5, spanner.text = "Genre")
Characteristic N Genre p-value1
alternative, indie & pop, N = 40 country, folk, americana & blues, N = 48 funk, soul and R&B, N = 32 punk, rock & metal, N = 76 rap & hip hop, N = 60
value 256 <0.001
    Mean (SD) 5.0 (1.5) 5.3 (1.8) 6.3 (1.3) 6.3 (1.5) 5.2 (1.7)
    Median (IQR) 5.0 (4.4 - 5.8) 5.0 (4.0 - 7.0) 6.6 (5.5 - 7.3) 6.5 (5.5 - 7.4) 5.5 (4.0 - 6.2)
    Range 1.3 - 8.0 1.2 - 9.0 4.0 - 8.2 1.1 - 9.3 1.2 - 8.5
1 Kruskal-Wallis rank sum test

2.8 Correlation among raters

Code
testRes <- corrplot::cor.mtest(mad_sheet %>% select(Charlie:Tyler) %>% na.omit() , conf.level = 0.95)
corrplot::corrplot(mad_sheet %>% select(Charlie:Tyler) %>% na.omit() %>% cor(), 
                   diag = FALSE, type = "lower", addCoef.col = "black", method = "color")

Code
mad_sheet %>% select(Charlie:Tyler) %>% na.omit() %>% 
  GGally::ggpairs(.,lower = list(continuous = "smooth", 
                                 wrap_fn_with_param_arg = c(method = "loess", fill = "blue"))) 

2.8.1 Correlation with All Music ratings

Code
testRes <- corrplot::cor.mtest(mad_sheet %>% select(Charlie:Tyler, all_music) %>% na.omit() , conf.level = 0.95)
corrplot::corrplot(mad_sheet %>% select(Charlie:Tyler, all_music) %>% na.omit() %>% cor(), 
                   diag = FALSE, type = "lower", addCoef.col = "black", method = "color")

2.8.2 Correlation with Rate Your Music ratings

Code
testRes <- corrplot::cor.mtest(mad_sheet %>% select(Charlie:Tyler, rym) %>% na.omit() , conf.level = 0.95)
corrplot::corrplot(mad_sheet %>% select(Charlie:Tyler, rym) %>% na.omit() %>% cor(), 
                   diag = FALSE, type = "lower", addCoef.col = "black", method = "color")

2.9 Person vs. group

Code
mad_sheet %<>% mutate(t_minus_chuck = ((total - Charlie)/3)) %>% 
  mutate(t_minus_josh = (total - Josh)/3) %>% 
  mutate(t_minus_just = (total - Justin)/3) %>% 
  mutate(t_minus_tyler = (total - Tyler)/3)

ggplotly(mad_sheet %>% 
  ggplot(., aes(x = Charlie, y = t_minus_chuck, colour= who, text = album)) +geom_point() +
  geom_abline(intercept = c(0,0), slope = 1)+
  geom_abline(intercept = c(0,1), slope = 1, linetype = 2) +
  geom_abline(intercept = c(0,-1), slope = 1, linetype = 2 )+
  geom_abline(intercept = c(0,2), slope = 1, linetype = 3) +
  geom_abline(intercept = c(0,-2), slope = 1, linetype = 3))
Code
mad_sheet %>% select(Charlie, t_minus_chuck) %>% na.omit() %$% 
cor(Charlie, t_minus_chuck)
[1] 0.6654251
Code
mad_sheet %>% select(album,Charlie, t_minus_chuck) %>% 
  pivot_longer(., -1) %>% mutate(name = ifelse(grepl("minus", name), "Others", "Self")) %>% 
  select(name, value) %>% jgt(., by = "name", add.p = TRUE)
Characteristic N Others, N = 64 Self, N = 64 p-value1
value 128 0.342
    Mean (SD) 5.7 (1.3) 5.4 (1.6)
    Median (IQR) 5.8 (4.8 - 6.6) 5.6 (4.4 - 6.7)
    Range 2.5 - 8.1 1.2 - 8.5
1 Wilcoxon rank sum test
Code
ggplotly(mad_sheet %>% 
  ggplot(., aes(x = Josh, y = t_minus_josh, colour= who, text = album)) +geom_point() +
  geom_abline(intercept = c(0,0), slope = 1, linetype = 1) +
  geom_abline(intercept = c(0,1), slope = 1, linetype = 2) +
  geom_abline(intercept = c(0,-1), slope = 1, linetype = 2 )+
  geom_abline(intercept = c(0,2), slope = 1, linetype = 3) +
  geom_abline(intercept = c(0,-2), slope = 1, linetype = 3)+ 
    coord_cartesian(xlim = c(1,9), ylim = c(1,9)))
Code
mad_sheet %>% select(Josh, t_minus_josh) %>% na.omit() %$% 
cor(Josh, t_minus_josh)
[1] 0.6446486
Code
mad_sheet %>% select(album,Josh, t_minus_josh) %>% 
  pivot_longer(., -1) %>% mutate(name = ifelse(grepl("minus", name), "Others", "Self")) %>% 
  select(name, value) %>% jgt(., by = "name", add.p = TRUE)
Characteristic N Others, N = 64 Self, N = 64 p-value1
value 128 0.177
    Mean (SD) 5.6 (1.2) 5.8 (1.9)
    Median (IQR) 5.6 (4.7 - 6.6) 6.0 (4.5 - 7.1)
    Range 2.4 - 8.2 1.1 - 9.3
1 Wilcoxon rank sum test
Code
ggplotly(mad_sheet %>% 
  ggplot(., aes(x = Justin, y = t_minus_just, colour= who, text = album)) +geom_point() +
  geom_abline(intercept = c(0,0), slope = 1)+
  geom_abline(intercept = c(0,1), slope = 1, linetype = 2) +
  geom_abline(intercept = c(0,-1), slope = 1, linetype = 2 )+
  geom_abline(intercept = c(0,2), slope = 1, linetype = 3) +
  geom_abline(intercept = c(0,-2), slope = 1, linetype = 3) + 
    coord_cartesian(xlim = c(1,9), ylim = c(1,9)))
Code
mad_sheet %>% select(Justin, t_minus_just) %>% na.omit() %$% 
cor(Justin, t_minus_just)
[1] 0.5387147
Code
mad_sheet %>% select(album,Justin, t_minus_just) %>% 
  pivot_longer(., -1) %>% mutate(name = ifelse(grepl("minus", name), "Others", "Self")) %>% 
  select(name, value) %>% jgt(., by = "name", add.p = TRUE)
Characteristic N Others, N = 64 Self, N = 64 p-value1
value 128 0.722
    Mean (SD) 5.6 (1.4) 5.7 (1.5)
    Median (IQR) 5.5 (4.7 - 6.5) 5.5 (4.8 - 7.0)
    Range 1.6 - 8.2 2.5 - 8.5
1 Wilcoxon rank sum test
Code
ggplotly(mad_sheet  %>% 
  ggplot(., aes(x = Tyler, y = t_minus_tyler, colour= who, text = album)) +geom_point() +
  geom_abline(intercept = c(0,0), slope = 1)+
  geom_abline(intercept = c(0,1), slope = 1, linetype = 2) +
  geom_abline(intercept = c(0,-1), slope = 1, linetype = 2 )+
  geom_abline(intercept = c(0,2), slope = 1, linetype = 3) +
  geom_abline(intercept = c(0,-2), slope = 1, linetype = 3)+ 
    coord_cartesian(xlim = c(1,9), ylim = c(1,9)))
Code
mad_sheet %>% select(Tyler, t_minus_tyler) %>% na.omit() %$% 
cor(Tyler, t_minus_tyler)
[1] 0.4802801
Code
mad_sheet %>% select(album,Tyler, t_minus_tyler) %>% 
  pivot_longer(., -1) %>% mutate(name = ifelse(grepl("minus", name), "Others", "Self")) %>% 
  select(name, value) %>% jgt(., by = "name", add.p = TRUE)
Characteristic N Others, N = 64 Self, N = 64 p-value1
value 128 0.994
    Mean (SD) 5.6 (1.4) 5.6 (1.7)
    Median (IQR) 5.8 (4.8 - 6.7) 5.6 (5.0 - 7.0)
    Range 2.2 - 8.2 1.3 - 9.0
1 Wilcoxon rank sum test

2.10 Distribution of ratings by album chooser

Code
mad_sheet %>% select(Charlie:Tyler, who) %>% 
  pivot_longer(., -c("who"), values_drop_na = TRUE) %>% select(value, who) %>% 
  ggplot(., aes(x = value, group = who, colour = who))+ geom_density() + 
  labs(title = "Album ratings", colour = "Album picked by") + theme_minimal()

2.11 Distribution of ratings by album rater

Code
mad_sheet %>% select(Charlie:Tyler, who) %>% 
  pivot_longer(., -c("who"), values_drop_na = TRUE) %>% select(value, name) %>% 
  ggplot(., aes(x = value, group = name, colour = name))+ geom_density() + 
  labs(title = "Ratings by person", colour = "Person rating")+ theme_minimal()

2.12 Album length impact on ratings

Code
mad_sheet %>% select(length, g2, Charlie:Tyler) %>% pivot_longer(., -c(1:2), values_drop_na = TRUE) %>% 
ggplot(., aes(x = length, y = value, colour = name, group = name)) + geom_point() +
  geom_smooth(method = "lm", se = FALSE)+ theme_minimal()

2.13 Album length impact on ratings by genre

Code
mad_sheet %>% select(length, g2, Charlie:Tyler) %>% pivot_longer(., -c(1:2), values_drop_na = TRUE) %>% 
ggplot(., aes(x = length, y = value, colour = g2, group = g2)) + geom_point() +geom_smooth(method = "lm", se = FALSE)+ theme_minimal()

2.14 Popularity impact on ratings

Code
mad_sheet %>% select(popularity, g2, Charlie:Tyler) %>% pivot_longer(., -c(1:2), values_drop_na = TRUE) %>% 
ggplot(., aes(x = popularity, y = value, colour = name, group = name)) + geom_point() +
  geom_smooth(method = "lm", se = FALSE)+ theme_minimal()

2.15 Popularity impact on ratings by genre

Code
mad_sheet %>% select(popularity, g2, Charlie:Tyler) %>% pivot_longer(., -c(1:2), values_drop_na = TRUE) %>% 
ggplot(., aes(x = popularity, y = value, colour = g2, group = g2)) + geom_point() +
  geom_smooth(method = "lm", se = FALSE)+ theme_minimal()

2.16 Album year impact on ratings

Code
mad_sheet %>% select(year, g2, Charlie:Tyler) %>% pivot_longer(., -c(1:2), values_drop_na = TRUE) %>% 
ggplot(., aes(x = year, y = value, colour = name, group = name)) + geom_point() +
  geom_smooth(method = "lm", se = FALSE)+ theme_minimal()

2.17 Album year impact on ratings by genre

Code
mad_sheet %>% select(year, g2, Charlie:Tyler) %>% pivot_longer(., -c(1:2), values_drop_na = TRUE) %>% 
ggplot(., aes(x = year, y = value, colour = g2, group = g2)) + geom_point() +geom_smooth(method = "lm", se = FALSE)+ theme_minimal()

2.18 Ratings by album

Code
mad_sheet %>% select(album, who, Charlie:Tyler) %>% na.omit() %>% pivot_longer(., -c(1:2)) %>% 
  group_by(album) %>% mutate(mean = mean(value), sd = sd(value)) %>% 
  ungroup() %>% 
  mutate(album = fct_reorder(album, mean, max)) %>% 
  ggplot(., aes(x = value, y = album, colour = name)) +geom_point() +theme_minimal()

2.19 Average ratings by album

Code
mad_sheet %>% select(album, who, Charlie:Tyler) %>% na.omit() %>% pivot_longer(., -c(1:2)) %>% 
  group_by(album) %>% mutate(mean = mean(value), sd = sd(value)) %>% 
  ungroup() %>% 
  mutate(album = fct_reorder(album, mean, max)) %>% 
  select(who, album, mean, sd) %>% distinct() %>% 
  ggplot(., aes(x = mean, y = album, colour = who)) +
  geom_point() +theme_minimal() + geom_errorbarh(aes(xmin = mean-sd, xmax = mean+sd, height = .01))

Code
mad_sheet %>% select(album, who, ends_with("_st")) %>% na.omit() %>% pivot_longer(., -c(1:2)) %>% 
  group_by(album) %>% mutate(mean = mean(value), sd = sd(value)) %>% 
  ungroup() %>% 
  mutate(album = fct_reorder(album, mean, max)) %>% 
  select(who, album, mean, sd) %>% distinct() %>% 
  ggplot(., aes(x = mean, y = album, colour = who)) +
  geom_point() +theme_minimal() + geom_errorbarh(aes(xmin = mean-sd, xmax = mean+sd, height = .01))

2.20 Average rating by standard deviation

Code
ggplotly(mad_sheet %>% select(artist, album, who, Charlie:Tyler) %>% na.omit() %>% pivot_longer(., -c(1:3)) %>% 
  group_by(album) %>% mutate(mean = mean(value), sd = sd(value)) %>% 
  select(artist, album, mean, sd, who) %>% distinct() %>% 
    mutate(text = paste(artist, album, sep = "\n")) %>% 
  ggplot(., aes(x = mean, y = sd, colour = who, text = text)) + geom_point() +theme_minimal())

3 Songs

Code
mad_songs %>% select(a1, album, track_name, y2, duration__ms_, popularity, genres:time_signature) %>% j.reactable()
Code
# fa <- data.frame(aa = list.files("jpeg")) %>% mutate(replace = gsub(".jpeg", ".png", aa))
# 
# for(i in 1:nrow(fa)){
#     img <- jpeg::readJPEG(paste0("jpeg/", fa$aa[i]))
#     Xx <- file.path("png/", fa$replace[i])
#     writePNG(img, Xx)
# }



# quarto publish quarto-pub madness.qmd

4 Regression

Code
dd <- datadist(mad_sheet); options(datadist='dd')

jm <- ols(Josh ~ who + g2 + length + year, data = mad_sheet %>% mutate(who = relevel(factor(who), "Josh")) )
cm <- ols(Charlie ~ who + g2 + length + year, data = mad_sheet %>% mutate(who = relevel(factor(who), "Chuck")) )
tm <- ols(Tyler ~ who + g2 + length + year, data = mad_sheet %>% mutate(who = relevel(factor(who), "Tyler")) )
jmm <- ols(Justin ~ who + g2 + length + year, data = mad_sheet %>% mutate(who = relevel(factor(who), "Justin")) )



trib.cols.rms <- tribble(~term, ~new, ~level, ~label,
             'who', 'Album picked by', '1', 'Album picked by',
             'g2', 'Genre', '2', 'Genre',
             'length', 'Length', '3', 'Length',
             'year', 'Year', '4', 'Year',
             'Charlie', 'Charlie', '5', 'Charlie',
             'Justin', 'Justin', '6', 'Justin',
             'Tyler', 'Tyler', '7', 'Tyler',
             'Josh', 'Josh', '8', 'Josh')

require(tibble)
prr <- rbind(
rms.sum.table3(summary(jm, year = c(1985, 2005), length = c(40, 60), who = "Josh"), 
               trib.cols.rms, anova(jm), raw = TRUE) %>% mutate(X = "Josh"),
rms.sum.table3(summary(cm, year = c(1985, 2005), length = c(40, 60), who = "Chuck"),
               trib.cols.rms, anova(cm), raw = TRUE) %>% mutate(X = "Chuck"),
rms.sum.table3(summary(tm, year = c(1985, 2005), length = c(40, 60), who = "Tyler"), 
               trib.cols.rms, anova(tm), raw = TRUE) %>% mutate(X = "Tyler"),
rms.sum.table3(summary(jmm, year = c(1985, 2005), length = c(40, 60), who = "Justin"), 
               trib.cols.rms, anova(jmm), raw = TRUE) %>% mutate(X = "Justin")) %>% 
  mutate(p = ifelse(term == "who", highc, axis)) %>% 
  mutate(f = if_else(term == "who", label, facet))

prr %>%
             select(X, label, levels, effect, conf.low, conf.high, any_of(c('d.f.', 'P'))) %>% 
             mutate(across(where(is.numeric), ~round(.x, 3))) %>% 
  group_by(X) %>% 
             jgtt(.)
label levels effect conf.low conf.high d.f. P
Josh
Album picked by Chuck vs. Josh -1.597 -2.867 -0.328 3 0.038
Album picked by Justin vs. Josh -1.485 -2.879 -0.092 3 0.038
Album picked by Tyler vs. Josh -1.602 -2.875 -0.328 3 0.038
Genre alternative, indie & pop vs. punk, rock & metal -0.800 -2.305 0.704 4 0.230
Genre country, folk, americana & blues vs. punk, rock & metal -1.423 -2.756 -0.090 4 0.230
Genre funk, soul and R&B vs. punk, rock & metal -0.132 -1.669 1.405 4 0.230
Genre rap & hip hop vs. punk, rock & metal -1.279 -2.779 0.221 4 0.230
Length 60 vs. 40 0.104 -0.767 0.975 1 0.812
Year 2005 vs. 1985 -0.176 -0.813 0.460 1 0.581
Chuck
Album picked by Josh vs. Chuck -0.630 -1.612 0.353 3 0.206
Album picked by Justin vs. Chuck -1.105 -2.193 -0.017 3 0.206
Album picked by Tyler vs. Chuck -0.877 -1.893 0.138 3 0.206
Genre alternative, indie & pop vs. punk, rock & metal -1.268 -2.432 -0.103 4 0.048
Genre country, folk, americana & blues vs. punk, rock & metal -1.492 -2.524 -0.461 4 0.048
Genre funk, soul and R&B vs. punk, rock & metal -0.558 -1.747 0.631 4 0.048
Genre rap & hip hop vs. punk, rock & metal -1.300 -2.461 -0.140 4 0.048
Length 60 vs. 40 -0.046 -0.720 0.628 1 0.892
Year 2005 vs. 1985 -0.362 -0.855 0.130 1 0.146
Tyler
Album picked by Chuck vs. Tyler -0.940 -2.000 0.120 3 0.012
Album picked by Josh vs. Tyler -0.757 -1.785 0.272 3 0.012
Album picked by Justin vs. Tyler -1.806 -2.861 -0.751 3 0.012
Genre alternative, indie & pop vs. punk, rock & metal -1.915 -3.130 -0.700 4 0.052
Genre country, folk, americana & blues vs. punk, rock & metal -0.541 -1.618 0.535 4 0.052
Genre funk, soul and R&B vs. punk, rock & metal -0.376 -1.617 0.865 4 0.052
Genre rap & hip hop vs. punk, rock & metal -0.864 -2.076 0.347 4 0.052
Length 60 vs. 40 0.085 -0.619 0.788 1 0.810
Year 2005 vs. 1985 -0.227 -0.741 0.287 1 0.380
Justin
Album picked by Chuck vs. Justin -0.438 -1.577 0.700 3 0.667
Album picked by Josh vs. Justin -0.118 -1.246 1.010 3 0.667
Album picked by Tyler vs. Justin -0.563 -1.621 0.495 3 0.667
Genre alternative, indie & pop vs. punk, rock & metal 0.149 -1.069 1.367 4 0.180
Genre country, folk, americana & blues vs. punk, rock & metal -0.288 -1.367 0.791 4 0.180
Genre funk, soul and R&B vs. punk, rock & metal 0.188 -1.056 1.432 4 0.180
Genre rap & hip hop vs. punk, rock & metal 1.201 -0.013 2.416 4 0.180
Length 60 vs. 40 -0.686 -1.392 0.019 1 0.056
Year 2005 vs. 1985 -0.423 -0.939 0.092 1 0.105
Code
prr%>% mutate(across(where(is.numeric), as.numeric)) %>% 
    ggplot(., aes(x = effect, y = p, colour = X)) + geom_point(position = ggstance::position_dodgev(height = .55)) + 
    geom_errorbarh(aes(xmin = conf.low, xmax = conf.high), height = 0, position = ggstance::position_dodgev(height = .55)) +
    theme_classic() + 
    geom_vline(xintercept = 0, linetype = 2) + 
    labs(x = "Estimate", y = NULL, colour = element_blank()) +
    facet_grid(f~., scales = "free_y", switch = "y", space = "free")+
    theme(strip.text.y.left = element_text(angle = 0))+
    theme(strip.background  = element_blank()) +
    theme(panel.spacing.y = unit(0,"line")) +
    theme(strip.placement = 'outside') +
    theme(panel.grid.major.x = element_line(colour = "gray90"),
          panel.grid.minor.x = element_line(colour = "gray95",
                                            size = 0.3),
          plot.background = element_rect(fill = "white", size = 1.3)) 

Code
jx <- ols(Josh ~ Charlie +Justin +Tyler +who, data = mad_sheet %>% mutate(who = relevel(factor(who), "Josh")) )
cx <- ols(Charlie ~ Josh +Justin +Tyler +who, data = mad_sheet %>% mutate(who = relevel(factor(who), "Chuck")) )
tx <- ols(Tyler ~ Charlie +Josh +Justin +who, data = mad_sheet %>% mutate(who = relevel(factor(who), "Tyler")) )
mx <- ols(Justin ~ Josh +Charlie +Tyler +who, data = mad_sheet %>% mutate(who = relevel(factor(who), "Justin")) )

pxx <- rbind(
rms.sum.table3(summary(jx, who = "Josh", Charlie = c(5,6), Tyler = c(5, 6), Justin = c(5, 6)), 
               trib.cols.rms, anova(jx), raw = TRUE) %>% mutate(X = "Josh"),
rms.sum.table3(summary(cx, who = "Chuck", Josh = c(5,6), Tyler = c(5, 6), Justin = c(5, 6)),
               trib.cols.rms, anova(cx), raw = TRUE) %>% mutate(X = "Chuck"),
rms.sum.table3(summary(tx, who = "Tyler", Charlie = c(5,6), Josh = c(5,6), Justin = c(5, 6)), 
               trib.cols.rms, anova(tx), raw = TRUE) %>% mutate(X = "Tyler"),
rms.sum.table3(summary(mx, who = "Justin", Charlie = c(5,6), Josh = c(5,6), Tyler = c(5, 6)), 
               trib.cols.rms, anova(mx), raw = TRUE) %>% mutate(X = "Justin")) %>% 
  mutate(p = ifelse(term == "who", highc, axis)) %>% 
  mutate(f = if_else(term == "who", label, facet))

pxx %>%
             select(X, label, levels, effect, conf.low, conf.high, any_of(c('d.f.', 'P'))) %>% 
             mutate(across(where(is.numeric), ~round(.x, 3))) %>% 
  group_by(X) %>% 
             jgtt(.)
label levels effect conf.low conf.high d.f. P
Josh
Album picked by Chuck vs. Josh -1.634 -2.527 -0.742 3 <0.001
Album picked by Justin vs. Josh -1.695 -2.618 -0.771 3 <0.001
Album picked by Tyler vs. Josh -1.248 -2.143 -0.353 3 <0.001
Charlie 6 vs. 5 0.510 0.235 0.785 1 <0.001
Justin 6 vs. 5 0.603 0.360 0.845 1 <0.001
Tyler 6 vs. 5 -0.114 -0.373 0.144 1 0.379
Chuck
Album picked by Josh vs. Chuck -1.392 -2.167 -0.616 3 <0.001
Album picked by Justin vs. Chuck -1.080 -1.903 -0.256 3 <0.001
Album picked by Tyler vs. Chuck -1.498 -2.251 -0.745 3 <0.001
Justin 6 vs. 5 0.005 -0.246 0.256 1 0.968
Tyler 6 vs. 5 0.426 0.231 0.621 1 <0.001
Josh 6 vs. 5 0.382 0.176 0.588 1 <0.001
Tyler
Album picked by Chuck vs. Tyler -1.425 -2.352 -0.497 3 <0.001
Album picked by Josh vs. Tyler -0.829 -1.776 0.118 3 <0.001
Album picked by Justin vs. Tyler -1.935 -2.833 -1.038 3 <0.001
Charlie 6 vs. 5 0.590 0.319 0.860 1 <0.001
Justin 6 vs. 5 0.219 -0.071 0.509 1 0.137
Josh 6 vs. 5 -0.119 -0.387 0.150 1 0.379
Justin
Album picked by Chuck vs. Justin -1.068 -1.943 -0.193 3 0.011
Album picked by Josh vs. Justin -1.419 -2.278 -0.560 3 0.011
Album picked by Tyler vs. Justin -1.014 -1.901 -0.127 3 0.011
Charlie 6 vs. 5 0.006 -0.274 0.285 1 0.968
Tyler 6 vs. 5 0.176 -0.057 0.409 1 0.137
Josh 6 vs. 5 0.503 0.301 0.705 1 <0.001
Code
pxx%>% mutate(across(where(is.numeric), as.numeric)) %>% 
    ggplot(., aes(x = effect, y = p, colour = X)) + geom_point(position = ggstance::position_dodgev(height = .55)) + 
    geom_errorbarh(aes(xmin = conf.low, xmax = conf.high), height = 0, position = ggstance::position_dodgev(height = .55)) +
    theme_classic() + 
    geom_vline(xintercept = 0, linetype = 2) + 
    labs(x = "Estimate", y = NULL, colour = element_blank()) +
    facet_grid(f~., scales = "free_y", switch = "y", space = "free")+
    theme(strip.text.y.left = element_text(angle = 0))+
    theme(strip.background  = element_blank()) +
    theme(panel.spacing.y = unit(0,"line")) +
    theme(strip.placement = 'outside') +
    theme(panel.grid.major.x = element_line(colour = "gray90"),
          panel.grid.minor.x = element_line(colour = "gray95",
                                            size = 0.3),
          plot.background = element_rect(fill = "white", size = 1.3))

Code
lrm(I(raw_rank_class=="Top 20ish") ~ who + g2 + popularity +length +order +rym, data = mad_sheet  )
Logistic Regression Model

lrm(formula = I(raw_rank_class == "Top 20ish") ~ who + g2 + popularity + 
    length + order + rym, data = mad_sheet)

                      Model Likelihood      Discrimination    Rank Discrim.    
                            Ratio Test             Indexes          Indexes    
Obs            64    LR chi2     17.36      R2       0.334    C       0.810    
 FALSE         44    d.f.           11      R2(11,64)0.095    Dxy     0.619    
 TRUE          20    Pr(> chi2) 0.0976    R2(11,41.2)0.143    gamma   0.620    
max |deriv| 5e-07                           Brier    0.163    tau-a   0.270    

                                    Coef    S.E.   Wald Z Pr(>|Z|)
Intercept                           -6.3710 4.8152 -1.32  0.1858  
who=Josh                            -0.0904 0.8418 -0.11  0.9145  
who=Justin                          -1.6287 1.1065 -1.47  0.1410  
who=Tyler                           -0.4909 0.9811 -0.50  0.6168  
g2=country, folk, americana & blues  1.0759 1.4121  0.76  0.4461  
g2=funk, soul and R&B                1.3126 1.4299  0.92  0.3587  
g2=punk, rock & metal                2.4928 1.3822  1.80  0.0713  
g2=rap & hip hop                     1.8714 1.4227  1.32  0.1884  
popularity                           0.2090 0.4430  0.47  0.6371  
length                              -0.0257 0.0312 -0.82  0.4108  
order                               -0.0183 0.0185 -0.99  0.3238  
rym                                  1.3751 0.9477  1.45  0.1468  
Code
require(RankAggreg)
data("geneLists")

top25CE <- RankAggreg(geneLists, 25, seed=100, rho=.01)

mx <- ratings %>% select(1:5) %>% pivot_longer(., -1) %>% arrange(name, desc(value)) %>% 
  group_by(name) %>% select(-value) %>% mutate(rank = 1:n()) %>% pivot_wider(., names_from = "rank", values_from = "album") %>% 
  as.matrix()

rownames(mx) <- mx[,1]
mx <- mx[, -1]


top20 <- RankAggreg(mx, nrow(ratings), seed=100, rho=.01, verbose = FALSE)
rank_agg <- data.frame(album = top20$top.list) %>% mutate(rank_agg = 1:n())

# topxx <- RankAggreg(mx[,1:20], 20, seed=100, rho=.01, verbose = FALSE)